package com.newtouch.bxzs.enterprise.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.newtouch.bxzs.common.base.model.Activity;
import com.newtouch.bxzs.enterprise.model.bo.*;
import com.newtouch.bxzs.enterprise.model.vo.CustomerDetailVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 营销活动Mapper类
 *
 * <p>
 * <b>History:</b>
 * <table border="1">
 * <tr>
 * <th>Date</th>
 * <th>Operator</th>
 * <th>Memo</th>
 * </tr>
 * <tr>
 * <td>2021年2月9日</td>
 * <td>Amour</td>
 * <td>Create</td>
 * </tr>
 * </table>
 * 
 * @author Amour
 * 
 * @version 1.0.0
 * @since 1.0.0
 */
@Mapper
public interface ActivityMapper extends BaseMapper<Activity> {

	/**
	 * 查询营销活动信息列表(管理岗)
	 * 
	 * @param userId
	 *            登录用户ID
	 * @param marketingActivityStatus
	 *            活动状态
	 * @return
	 */
	IPage<ActivityBO> getManagerActivityList(@Param("page") Page<ActivityBO> page, @Param("userId") String userId,
			@Param("marketingActivityStartDate") String marketingActivityStartDate,
			@Param("marketingActivityEndDate") String marketingActivityEndDate,
			@Param("marketingActivityStatus") Integer marketingActivityStatus,
			@Param("marketingActivityTheme") String marketingActivityTheme);

	/**
	 * 查询营销活动信息列表
	 * 
	 * @param userId
	 *            登录用户ID
	 * @param marketingActivityStatus
	 *            活动状态
	 * @return
	 */
	IPage<ActivityBO> getActivityList(@Param("page") Page<ActivityBO> page, @Param("userId") String userId,
			@Param("marketingActivityStartDate") String marketingActivityStartDate,
			@Param("marketingActivityEndDate") String marketingActivityEndDate,
			@Param("marketingActivityStatus") Integer marketingActivityStatus,
			@Param("marketingActivityTheme") String marketingActivityTheme);

	/**
	 * 查询营销活动信息列表
	 * 
	 * @param userId
	 *            登录用户ID
	 * @param marketingActivityStatus
	 *            活动状态
	 * @return
	 */
	IPage<ActivityBO> getAchievementActivityList(@Param("page") Page<ActivityBO> page, @Param("userId") String userId,
			@Param("marketingActivityStartDate") String marketingActivityStartDate,
			@Param("marketingActivityEndDate") String marketingActivityEndDate,
			@Param("marketingActivityTheme") String marketingActivityTheme, @Param("dataSource") String dataSource);

	/**
	 * 查询历史营销活动列表信息
	 * 
	 * @param page
	 * @param userId
	 * @return
	 */
	IPage<ActivityBO> getActivityStoryList(@Param("page") Page<ActivityBO> page, @Param("userId") String userId);

	/**
	 * 查询营销活动详情
	 * 
	 * @param userId
	 *            登录用户ID
	 * @param activityId
	 *            营销活动ID
	 * @return
	 */
	ActivityDetailBO getActivityDetail(@Param("userId") String userId, @Param("activityId") String activityId);

	/**
	 * 查询发布方营销活动客户详情
	 * 
	 * @param page
	 *            分页控件
	 * @param userId
	 *            登录用户ID
	 * @param activityId
	 *            营销活动ID
	 * @param customerName
	 *            客户姓名
	 * @return
	 */
	IPage<ConferenceActivityCustomerBO> getPublisherActivityCustomerList(
			@Param("page") Page<ConferenceActivityCustomerBO> page, @Param("userId") String userId,
			@Param("activityId") String activityId, @Param("customerName") String customerName);

	/**
	 * 查询营销活动所有客户信息
	 * 
	 * @param activityId
	 *            会议ID
	 * @return
	 */
	List<CustomerInventoryBO> getActivityCustomerList(@Param("activityId") String activityId);

	/**
	 * 查询接收方营销活动客户详情
	 * 
	 * @param page
	 *            分页控件
	 * @param userId
	 *            登录用户ID
	 * @param activityId
	 *            营销活动ID
	 * @param customerName
	 *            客户姓名
	 * @return
	 */
	IPage<ConferenceActivityCustomerBO> getAcceptionActivityCustomerList(
			@Param("page") Page<ConferenceActivityCustomerBO> page, @Param("userId") String userId,
			@Param("activityId") String activityId, @Param("customerName") String customerName);

	/**
	 * 添加营销活动个人客户
	 * 
	 * @param activityId
	 *            营销活动ID
	 * @param list
	 *            需要新增的营销活动客户信息
	 */
	Integer insertActivityCustomer(@Param("activityId") String activityId, @Param("createUserId") String createUserId,
			@Param("list") List<CustomerDetailVO> list);

	/**
	 * 删除营销活动个人客户
	 * 
	 * @param activityId
	 *            营销活动ID
	 * @param customerId
	 *            客户ID
	 * @return
	 */
	Integer deleteActivityPersonalCustomer(@Param("activityId") String activityId,
			@Param("customerId") String customerId);

	/**
	 * 删除营销活动客户信息
	 * 
	 * @param activityId
	 *            营销活动ID
	 * @return
	 */
	Integer deleteActivityCustomer(@Param("activityId") String activityId);

	/**
	 * 删除营销活动产品信息
	 * 
	 * @param activityId
	 *            营销活动ID
	 * @return
	 */
	Integer deleteActivityProduct(@Param("activityId") String activityId);

	/**
	 * 添加营销活动产品信息
	 * 
	 * @param activityId
	 *            营销活动ID
	 * @param createUserId
	 *            创建人ID
	 * @param list
	 *            产品ID集合
	 * @return
	 */
	Integer insertActivityProduct(@Param("activityId") String activityId, @Param("createUserId") String createUserId,
			@Param("list") List<String> list);

	/**
	 * 移除营销活动客户与本端用户对应关系
	 * 
	 * @param activityId
	 *            营销活动ID
	 * @param list
	 *            本端用户ID集合
	 * @return
	 */
	Integer updateActivityCustomerUser(@Param("activityId") String activityId, @Param("list") List<String> list);

	/**
	 * 删除本端用户与营销活动关联表
	 * 
	 * @param activityId
	 *            营销活动ID
	 * @param list
	 *            本端用户ID集合
	 * @return
	 */
	Integer deleteActivityUser(@Param("activityId") String activityId);

	/**
	 * 新增营销活动与用户关联表数据
	 * 
	 * @param activityId
	 *            营销活动ID
	 * @param createUserId
	 *            登录用户ID
	 * @param list
	 *            本端用户ID集合
	 * @return
	 */
	Integer insertActivityUser(@Param("activityId") String activityId, @Param("createUserId") String createUserId,
			@Param("list") List<String> list);

	/**
	 * 新增营销活动与用户关联表数据(接收时)
	 * 
	 * @param activityId
	 * @param list
	 * @return
	 */
	Integer insertActivityUserByJobNumber(@Param("activityId") String activityId,
										  @Param("list") List<String> list,
										  @Param("isAcception")boolean isAcception);

	/**
	 * 新增营销活动与对端用户关联表数据(接收时)
	 *
	 * @param conferenceId
	 *            营销会议ID
	 * @param list
	 *            用户工号集合
	 * @return
	 */
	Integer insertActivityCooperationUserByJobNumber(@Param("conferenceId") String conferenceId,
													   @Param("list") List<String> list,@Param("isAcception") boolean isAcception);

	/**
	 * 删除营销活动与合作公司用户关联表数据
	 * 
	 * @param activityId
	 *            营销活动ID
	 * @return
	 */
	Integer deleteActivityCooperationUser(@Param("activityId") String activityId);

	/**
	 * 新增营销活动与合作公司用户关联表数据
	 * 
	 * @param activityId
	 *            营销活动ID
	 * @param createUserId
	 *            登录用户ID
	 * @param list
	 *            合作用户ID集合
	 * @return
	 */
	Integer insertActivityCooperationUser(@Param("activityId") String activityId,
			@Param("createUserId") String createUserId, @Param("list") List<String> list);

	/**
	 * 获取客户分配情况列表
	 * 
	 * @param page
	 *            分页
	 * @param activityId
	 *            营销活动ID
	 * @param distributionFlag
	 *            是否查询已分配客户
	 * @return
	 */
	IPage<ConferenceActivityCustomerBO> getDistributionCustomerList(
			@Param("page") Page<ConferenceActivityCustomerBO> page, @Param("activityId") String activityId,
			@Param("distributionFlag") Boolean distributionFlag);

	/**
	 * 保存分配客户信息
	 * 
	 * @param activityId
	 *            营销活动id
	 * @param userId
	 *            用户id
	 * @param customerId
	 *            客户id
	 * @return
	 */
	Integer updateDistributionCustomer(@Param("activityId") String activityId, @Param("userId") String userId,
			@Param("customers") List<CustomerInventoryBO> customerList);

	/**
	 * 修改活动状态
	 * 
	 * @param activityId
	 *            营销活动id
	 * @return
	 */
	Integer updateActivityStatus(@Param("activityId") String activityId,
			@Param("marketingActivityStatus") String marketingActivityStatus);

	/**
	 * 查询营销活动统计信息
	 * 
	 * @param activityId
	 *            营销活动id
	 * @return
	 */
	ConferenceActivityStatisticsBO getActivityStatistics(@Param("activityId") String activityId);

	/**
	 * 获取营销活动产品列表
	 * 
	 * @param page
	 *            分页
	 * @param activityId
	 *            营销活动ID
	 * @param productName
	 *            产品名称
	 * @return
	 */
	IPage<ConferenceActivityProductBO> getActivityProduct(@Param("page") Page<ConferenceActivityProductBO> page,
			@Param("activityId") String activityId, @Param("productName") String productName);

	/**
	 * 查询营销活动本端用户信息
	 * 
	 * @param page
	 *            分页
	 * @param activityId
	 *            营销活动ID
	 * @param selectCondition
	 *            查询条件
	 * @return
	 */
	IPage<ConferenceActivityUserBO> getActivityUser(@Param("page") Page<ConferenceActivityUserBO> page,
			@Param("activityId") String activityId, @Param("selectCondition") String selectCondition);

	/**
	 * 查询营销活动合作公司用户信息
	 * 
	 * @param page
	 *            分页
	 * @param activityId
	 *            营销活动ID
	 * @param selectCondition
	 *            查询条件
	 * @return
	 */
	IPage<ConferenceActivityUserBO> getActivityCooperationUser(@Param("page") Page<ConferenceActivityUserBO> page,
			@Param("activityId") String activityId, @Param("selectCondition") String selectCondition);

	/**
	 * 参加营销活动
	 * 
	 * @param userId
	 *            用户ID
	 * @return
	 */
	Integer joinActivity(@Param("userId") String userId, @Param("activityId") String activityId);

	/**
	 * 电话联系客户
	 * 
	 * @param activityId
	 *            会议ID
	 * @return
	 */
	Integer contactCustomer(@Param("activityId") String activityId, @Param("customer") CustomerDetailVO customer);

	/**
	 * 修改营销会议与客户关联表中的客户ID
	 * 
	 * @param activityId
	 *            会议ID
	 * @param customer
	 *            客户信息
	 * @return
	 */
	Integer updateCustomerId(@Param("activityId") String activityId, @Param("customer") CustomerDetailVO customer);

	/**
	 * 根据产品ID获取编码
	 * 
	 * @param list
	 * @return
	 */
	List<String> getProductCodeById(@Param("list") List<String> list);

	/**
	 * 根据产品编码获取产品ID
	 * 
	 * @param list
	 * @return
	 */
	List<String> getProductIdByCode(@Param("list") List<String> list);

	/**
	 * 接收营销活动入库
	 * @param activity
	 * @return
	 */
	int insertActivity(Activity activity);

	/**
	 * 根据营销会议id查询参会公司统一社会信用代码
	 * @param activityId 营销会议id
	 * @return 参会公司统一社会信用代码
	 */
	List<String> getUnifiedSocialCreditCodeByActivity(String activityId);
}
